package collection;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * List集合
 * List集合的特点是可以存放重复元素且有序
 * 其提供了一组通过下标操作元素的方法
 * java.util.List是一个接口
 * 常用实现类:
 * java.util.ArrayList:内部使用数组实现,查询元素性能更好
 * java.util.LinkedList:内部使用链表实现,增删元素性能更好,首尾增删元素性能最佳
 *
 * boolean add(E e)
 * E get(int index)
 * E set(int index,E e)
 * int size()
 *
 * static void reverse(List list)
 *
 * 案例：反转集合 Collections.reverse(要反转的集合)
 *
 * @author XingHaiYang
 * @date 2022/9/28 20:01
 */
public class ListDemo1 {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        // List<String> list = new LinkedList<>();
        /*
        * boolean add(Object obj)
        * 向集合中添加元素
        * */
        list.add("1");
        list.add("2");
        list.add("3");
        list.add("4");
        list.add("5");
        System.out.println(list);
        /*
         * E get(int index)
         * 获取指定下标处的元素
         * element:元素
         * */
        // 获取list集合第三个元素
        String threeElement = list.get(2);
        System.out.println(threeElement);
        /*
        * int size()
        * 返回集合中元素的个数
        * */
        // 通过下标获取到集合中的所有元素
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
        /*
        * E set(int index,E e)
        * 将给定元素设置到指定位置，返回值为被替换的元素
        * */
        String oldElement = list.set(2, "6");
        System.out.println(oldElement);
        System.out.println(list);
        /*
        * 结合get/set实现集合反转
        * 提示：正数下标是i的话，倒数下标算法：list.size()-1-i
        * 交换次数：size/2
        * positive:正数
        * backwards:倒数
        * */
        for (int i = 0; i < list.size()/2; i++) {
            String positiveElement = list.get(i);//获取正数部位的元素
            String backwardsElement = list.set(list.size() - 1 - i, positiveElement);//将正数部位的元素给到倒数部位
            list.set(i,backwardsElement);//将替换下来的倒数部位的元素给到正数部位，完成反转
        }
        System.out.println(list);
        /*
        * java.util.Collections是集合的工具类,提供了多个静态方法，便于我们操作集合.
        * reverse()方法用于反转List集合.
        * */
        Collections.reverse(list);
    }
}
